package org.uca.dss.curso1011.grupo3.gestionreservas;

import java.util.ArrayList;
import java.util.List;

/**
 * Esta clase implementa los trenes de nustro sistema de gestion de reservas. La
 * definimos como final para que sólo sea posible inicializarla con el
 * constructor, pero los metodos no pueden modificarla. Estamos utilizando el
 * patron inmutable.
 * 
 * @author Adolfo Barroso, Levi Orta, Juan Manuel Chaves
 */
public final class Tren {

    //Atributos de la clase
    private String nombre;
    private int nAsientos;
    private double precioTramo;

    private List<Trayecto> trayectos = new ArrayList<Trayecto>();


    /**
     * Constructor de la clase Tren. Para poder crear un nuevo tren sera
     * necesario asignarle un nombre, dar el numero de asientos del que dispone
     * el tren y el precio que costara un trama en dicho tren.
     *
     * @param nombre: Nombre del Tren.
     * @param nAsientos: numero de asientos del Tren.
     * @param precioTramo: precio del tramo para el Tren.
     */
    public Tren(String nombre, int n_asientos, double precio_tramo){
        this.nombre = nombre;
        this.nAsientos = n_asientos;
        this.precioTramo = precio_tramo;
    }

    /**
     * Devuelve el nombre que tiene asignado el tren.
     *
     * @return el nombre del tren
     */
    protected String getNombre() {
        return nombre;
    }

    /**
     * Devuelve el numero de asientos de los que dispone el tren.
     *
     * @return nAsientos del tren
     */
    public int getNAsientos() {
        return nAsientos;
    }

    /**
     * Devuelve el precio que cuesta un tramo para dicho tren.
     *
     * @return precioTramo del tren
     */
    protected double getPrecioTramo() {
        return precioTramo;
    }

    /**
     * Establece un trayecto a cubrir por el tren.
     *
     * @param tr: Trayecto a introducir en la lista de trayectos del Tren.
     */
    protected void addTrayecto(Trayecto tr){
        trayectos.add(tr);
    }

    /**
     * Devuelve la lista de trayectos que cubre dicho tren.
     *
     * @return Devuelve la lista de Trayectos.
     */
    protected List<Trayecto> getTrayectos(){
        return this.trayectos;
    }
}
